package ar.edu.unq.persistencia.gpilla;

import ar.edu.unq.persistencia.gpilla.exceptions.PartidoDeCopaEmpatadoException;

/**
 * TODO: description
 */
public class PartidoDeCopa extends PartidoAbstract {

    /* uso los partidos de la super clase para llenarlo en los partidos */

    PartidoSimple partidoIda; // el local en este partido, es el equipo uno!

    PartidoSimple partidoVuelta;

    int penalesEquipoUno;

    int penalesEquipoDos;

    public PartidoDeCopa(final PartidoSimple partidoIda, final PartidoSimple partidoVuelta, final int penalesEquipoUno,
            final int penalesEquipoDos) {
        super();
        this.partidoIda = partidoIda;
        this.partidoVuelta = partidoVuelta;
        this.penalesEquipoUno = penalesEquipoUno;
        this.penalesEquipoDos = penalesEquipoDos;
    }

    public PartidoDeCopa() {
        super();
    }

    public PartidoSimple getPartidoIda() {
        return this.partidoIda;
    }

    public void setPartidoIda(final PartidoSimple partidoIda) {
        this.partidoIda = partidoIda;
    }

    public PartidoSimple getPartidoVuelta() {
        return this.partidoVuelta;
    }

    public void setPartidoVuelta(final PartidoSimple partidoVuelta) {
        this.partidoVuelta = partidoVuelta;
    }

    public int getPenalesEquipoUno() {
        return this.penalesEquipoUno;
    }

    public void setPenalesEquipoUno(final int penalesEquipoUno) {
        this.penalesEquipoUno = penalesEquipoUno;
    }

    public int getPenalesEquipoDos() {
        return this.penalesEquipoDos;
    }

    public void setPenalesEquipoDos(final int penalesEquipoDos) {
        this.penalesEquipoDos = penalesEquipoDos;
    }

    @Override
    public Equipo getGanador() {
        if (this.getGolesEquipoUno() > this.getGolesEquipoDos()) {
            return this.partidoIda.getLocal();
        } else if (this.getGolesEquipoDos() > this.getGolesEquipoUno()) {
            return this.partidoVuelta.getLocal();
        } else if (this.penalesEquipoUno > this.penalesEquipoDos) {
            return this.partidoIda.getLocal();
        } else if (this.penalesEquipoDos > this.penalesEquipoUno) {
            return this.partidoVuelta.getLocal();
        } else { // esto nunca va a pasar
            throw new PartidoDeCopaEmpatadoException();
        }
    }

    /**
     * Equipo uno es el local en el partido de ida
     */
    public int getGolesEquipoUno() {
        return this.partidoIda.getGolesLocal() + this.partidoVuelta.getGolesVisita();
    }

    /**
     * Equipo dos es la visita en el partido de ida
     */
    public int getGolesEquipoDos() {
        return this.partidoIda.getGolesVisita() + this.partidoVuelta.getGolesLocal();
    }

}
